package cn.initcap.bio.udp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/**
 * @author initcap
 * @date Created in 4/25/19 4:35 PM.
 */
public class UdpServer {

    public static void main(String[] args) throws IOException {
        /**
         * 接受数据
         */
        //1. 创建服务器端DatagramSocket,指定端口
        DatagramSocket datagramSocket = new DatagramSocket(8889);
        //2. 创建数据报,用于接受客户端发送的数据
        byte[] data = new byte[1024];
        DatagramPacket datagramPacket = new DatagramPacket(data, data.length);
        //3. 接受客户端发送的数据(此方法在接收到数据报之前会一直阻塞)
        System.out.println("********服务器端已经启动*********");
        datagramSocket.receive(datagramPacket);
        //4. 读取数据
        String info = new String(data, 0, datagramPacket.getLength());
        System.out.println("我是服务器，客户端说: " + info);
        /**
         * 响应数据
         */
        //1. 定义客户端的地址、端口号、数据
        InetAddress inetAddress = datagramPacket.getAddress();
        int port = datagramPacket.getPort();
        byte[] dataResult = "欢迎您!".getBytes();
        //2. 创建数据报，包含响应的数据信息
        DatagramPacket datagramPacket2 = new DatagramPacket(dataResult, dataResult.length, inetAddress, port);
        //3. 响应客户端
        datagramSocket.send(datagramPacket2);
        //4. 关闭资源信息
        datagramSocket.close();
    }

}
